home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 14 / CU Amiga Magazine's Super CD-ROM 14 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-09].iso / CUCD / Programming / IEditor / Expanders / MultiList / Edit.c < prev    next >
Encoding:
C/C++ Source or Header  |  1997-06-17  |  8.6 KB  |  311 lines

  1. /*
  2.     C source code created by Interface Editor
  3.     Copyright © 1994-1996 by Simone Tellini
  4.  
  5.     Generator:  C_IE_Mod.generator 37.1 (29.4.96)
  6.  
  7.     Copy registered to :  Simone Tellini
  8.     Serial Number      : #0
  9. */
  10.  
  11. #include <exec/types.h>
  12. #include <exec/nodes.h>
  13. #include <intuition/intuition.h>
  14. #include <intuition/gadgetclass.h>
  15. #include <libraries/gadtools.h>
  16. #include <clib/exec_protos.h>
  17. #include <clib/intuition_protos.h>
  18. #include <clib/gadtools_protos.h>
  19. #include <clib/graphics_protos.h>
  20. #ifdef PRAGMAS
  21. #include <pragmas/exec_pragmas.h>
  22. #include <pragmas/intuition_pragmas.h>
  23. #include <pragmas/graphics_pragmas.h>
  24. #include <pragmas/gadtools_pragmas.h>
  25. #endif
  26. #include <ctype.h>
  27. #include <string.h>
  28.  
  29. #include "DEV_IE:Include/IEditor.h"
  30.  
  31. #include "Edit.h"
  32.  
  33.  
  34. UBYTE *PosTitLabels[] = {
  35.     (UBYTE *)"Left",
  36.     (UBYTE *)"Right",
  37.     (UBYTE *)"Above",
  38.     (UBYTE *)"Below",
  39.     (UBYTE *)"In",
  40.     (UBYTE *)"Default",
  41.     NULL
  42. };
  43.  
  44. UWORD TagsGTypes[] = {
  45.     STRING_KIND,
  46.     STRING_KIND,
  47.     CYCLE_KIND,
  48.     CHECKBOX_KIND,
  49.     CHECKBOX_KIND,
  50.     BUTTON_KIND,
  51.     BUTTON_KIND,
  52.     INTEGER_KIND,
  53.     INTEGER_KIND,
  54.     INTEGER_KIND,
  55.     INTEGER_KIND,
  56.     CHECKBOX_KIND,
  57.     CHECKBOX_KIND,
  58.     CHECKBOX_KIND,
  59.     INTEGER_KIND,
  60.     INTEGER_KIND,
  61.     NULL };
  62.  
  63. struct TextAttr topaz8_065 = {
  64.     (STRPTR)"topaz.font", 8, 0x0, 0x41 };
  65.  
  66. struct NewGadget TagsNGad[] = {
  67.     65, 6, 182, 14, "Tit_le", &topaz8_065, GD_Tit, NULL, NULL, (APTR)TitClicked,
  68.     65, 21, 182, 14, "La_bel", &topaz8_065, GD_Label, NULL, NULL, (APTR)LabelClicked,
  69.     88, 36, 159, 14, "_Position", &topaz8_065, GD_PosTit, NULL, NULL, (APTR)PosTitClicked,
  70.     103, 51, 26, 11, "_Underscore", &topaz8_065, GD_Und, NULL, NULL, (APTR)UndClicked,
  71.     221, 51, 26, 11, "H_ighlight", &topaz8_065, GD_High, NULL, NULL, (APTR)HighClicked,
  72.     5, 121, 128, 14, "_Ok", &topaz8_065, GD_Ok, NULL, NULL, (APTR)OkClicked,
  73.     337, 121, 127, 14, "_Cancel", &topaz8_065, GD_Annulla, NULL, NULL, (APTR)AnnullaClicked,
  74.     381, 19, 74, 14, "_Top         ", &topaz8_065, GD_Top, NULL, NULL, (APTR)TopClicked,
  75.     381, 34, 74, 14, "Make _Visible", &topaz8_065, GD_Vis, NULL, NULL, (APTR)VisClicked,
  76.     183, 70, 64, 14, "Scroll _Width", &topaz8_065, GD_ScW, NULL, NULL, (APTR)ScWClicked,
  77.     183, 85, 64, 14, "Sp_acing     ", &topaz8_065, GD_Spc, NULL, NULL, (APTR)SpcClicked,
  78.     102, 106, 26, 11, "_Disabled", &topaz8_065, GD_Disab, NULL, NULL, (APTR)DisabClicked,
  79.     266, 106, 26, 11, "_Read Only", &topaz8_065, GD_ROn, NULL, NULL, (APTR)ROnClicked,
  80.     430, 106, 26, 11, "S_how Selected", &topaz8_065, GD_Show, NULL, NULL, (APTR)ShowClicked,
  81.     391, 70, 64, 14, "Ite_m Height", &topaz8_065, GD_IH, NULL, NULL, (APTR)IHClicked,
  82.     391, 85, 64, 14, "Ma_x Pen    ", &topaz8_065, GD_MaxP, NULL, NULL, (APTR)MaxPClicked
  83. };
  84.  
  85. ULONG TagsGTags[] = {
  86.     (GT_Underscore), '_', (GTST_MaxChars), 40, (TAG_DONE),
  87.     (GT_Underscore), '_', (GTST_MaxChars), 40, (TAG_DONE),
  88.     (GT_Underscore), '_', (GTCY_Labels), (ULONG)&PosTitLabels[0], (GTCY_Active), 5, (TAG_DONE),
  89.     (GT_Underscore), '_', (TAG_DONE),
  90.     (GT_Underscore), '_', (TAG_DONE),
  91.     (GT_Underscore), '_', (TAG_DONE),
  92.     (GT_Underscore), '_', (TAG_DONE),
  93.     (GT_Underscore), '_', (STRINGA_Justification), GACT_STRINGRIGHT, (TAG_DONE),
  94.     (GT_Underscore), '_', (STRINGA_Justification), GACT_STRINGRIGHT, (TAG_DONE),
  95.     (GT_Underscore), '_', (STRINGA_Justification), GACT_STRINGRIGHT, (TAG_DONE),
  96.     (GT_Underscore), '_', (STRINGA_Justification), GACT_STRINGRIGHT, (TAG_DONE),
  97.     (GT_Underscore), '_', (TAG_DONE),
  98.     (GT_Underscore), '_', (TAG_DONE),
  99.     (GT_Underscore), '_', (TAG_DONE),
  100.     (GT_Underscore), '_', (STRINGA_Justification), GACT_STRINGRIGHT, (TAG_DONE),
  101.     (GT_Underscore), '_', (STRINGA_Justification), GACT_STRINGRIGHT, (TAG_DONE)
  102. };
  103.  
  104. void CloseWnd( struct Window **Wnd, struct Gadget **GList )
  105. {
  106.     if( *Wnd ) {
  107.         CloseWindow( *Wnd );
  108.         *Wnd = NULL;
  109.     }
  110.     if( GList ) {
  111.         FreeGadgets( *GList );
  112.         *GList = NULL;
  113.     }
  114. }
  115.  
  116. LONG OpenTagsWindow( struct Window **Wnd, struct Gadget **GList, struct Gadget *Gadgets[], struct IE_Data *IE )
  117. {
  118.     LONG        ret_code = NULL;
  119.  
  120.     struct Gadget        *g;
  121.     UWORD            lc, tc;
  122.     struct NewGadget    ng;
  123.  
  124.     if(!( g = CreateContext( GList )))
  125.         return( 1L );
  126.  
  127.     for( lc = 0, tc = 0; lc < Tags_CNT; lc++ ) {
  128.  
  129.         CopyMem(( char * )&TagsNGad[ lc ], ( char * )&ng, ( long )sizeof( struct NewGadget ));
  130.         ng.ng_VisualInfo = IE->ScreenData->Visual;
  131.         ng.ng_TopEdge  += IE->ScreenData->YOffset;
  132.         ng.ng_LeftEdge += IE->ScreenData->XOffset;
  133.         Gadgets[ lc ] = g = CreateGadgetA((ULONG)TagsGTypes[ lc ], g, &ng, (struct TagItem *)&TagsGTags[ tc ] );
  134.  
  135.         while( TagsGTags[ tc ] ) tc += 2;
  136.         tc++;
  137.  
  138.         if( !g )
  139.             return( 2L );
  140.     }
  141.  
  142.  
  143.     struct TagItem WTags[] = {
  144.         { WA_Left, 62 },
  145.         { WA_Top, 68 },
  146.         { WA_Width, 474 + IE->ScreenData->XOffset },
  147.         { WA_Height, 138 + IE->ScreenData->YOffset },
  148.         { WA_MinWidth, 0 },
  149.         { WA_MaxWidth, -1 },
  150.         { WA_MinHeight, 0 },
  151.         { WA_MaxHeight, -1 },
  152.         { WA_PubScreen, IE->ScreenData->Screen },
  153.         { WA_Title, (ULONG)"Multiselect Listview Gadget" },
  154.         { WA_Flags, WFLG_DRAGBAR|WFLG_DEPTHGADGET|WFLG_SIMPLE_REFRESH|WFLG_ACTIVATE|WFLG_RMBTRAP },
  155.         { WA_IDCMP, BUTTONIDCMP|CHECKBOXIDCMP|INTEGERIDCMP|CYCLEIDCMP|STRINGIDCMP|IDCMP_REFRESHWINDOW|IDCMP_GADGETUP|IDCMP_VANILLAKEY },
  156.         { WA_Gadgets, *GList },
  157.         { TAG_DONE, NULL }
  158.     };
  159.  
  160.     if(!( *Wnd = OpenWindowTagList( NULL, &WTags[0] )))
  161.         return( 4L );
  162.  
  163.     GT_RefreshWindow( *Wnd, NULL );
  164.  
  165.     TagsRender( *Wnd, IE );
  166.     return( 0L );
  167. }
  168.  
  169. void TagsRender( struct Window *Wnd, struct IE_Data *IE )
  170. {
  171.  
  172.     DrawBevelBox( Wnd->RPort, 5 + IE->ScreenData->XOffset, 3 + IE->ScreenData->YOffset, 252, 62,
  173.         GT_VisualInfo, IE->ScreenData->Visual, GTBB_Recessed, TRUE, TAG_DONE );
  174.  
  175.     DrawBevelBox( Wnd->RPort, 5 + IE->ScreenData->XOffset, 65 + IE->ScreenData->YOffset, 459, 37,
  176.         GT_VisualInfo, IE->ScreenData->Visual, GTBB_Recessed, TRUE, TAG_DONE );
  177.  
  178.     DrawBevelBox( Wnd->RPort, 5 + IE->ScreenData->XOffset, 102 + IE->ScreenData->YOffset, 459, 19,
  179.         GT_VisualInfo, IE->ScreenData->Visual, GTBB_Recessed, TRUE, TAG_DONE );
  180.  
  181.     DrawBevelBox( Wnd->RPort, 257 + IE->ScreenData->XOffset, 3 + IE->ScreenData->YOffset, 207, 62,
  182.         GT_VisualInfo, IE->ScreenData->Visual, GTBB_Recessed, TRUE, TAG_DONE );
  183. }
  184.  
  185. LONG HandleTagsIDCMP( struct Window *Wnd, struct Gadget *Gadgets[], struct IE_Data *IE )
  186. {
  187.     struct IntuiMessage    *m, Msg;
  188.     BOOL            (*func)( struct Window *, struct Gadget **, struct IE_Data *, struct IntuiMessage * );
  189.     BOOL            running = TRUE;
  190.     int            class;
  191.     short            code;
  192.     struct Gadget    *gad;
  193.  
  194.     while( m = GT_GetIMsg( Wnd->UserPort )) {
  195.  
  196.         class = m->Class;
  197.         code  = m->Code;
  198.         gad   = (struct Gadget *)m->IAddress;
  199.  
  200.         CopyMem((char *)m, (char *)&Msg, (long)sizeof( struct IntuiMessage ));
  201.  
  202.         GT_ReplyIMsg( m );
  203.  
  204.         switch( class ) {
  205.  
  206.             case    IDCMP_VANILLAKEY:
  207.                 running = HandleTagsKeys( code, Wnd, Gadgets, IE, &Msg );
  208.                 break;
  209.  
  210.             case    IDCMP_REFRESHWINDOW:
  211.                 GT_BeginRefresh( Wnd );
  212.                 TagsRender( Wnd, IE );
  213.                 GT_EndRefresh( Wnd, TRUE );
  214.                 break;
  215.  
  216.             case    IDCMP_GADGETUP:
  217.                 func = gad->UserData;
  218.                 running = (*func)( Wnd, Gadgets, IE, &Msg );
  219.                 break;
  220.  
  221.         }
  222.     }
  223.     return( running );
  224. }
  225.  
  226. BOOL HandleTagsKeys( UBYTE Code, struct Window *Wnd, struct Gadget *Gadgets[], struct IE_Data *IE, struct IntuiMessage *Msg )
  227. {
  228.     BOOL running = TRUE;
  229.  
  230.     switch( tolower( Code )) {
  231.  
  232.         case    'l':
  233.             if(!( Gadgets[ GD_Tit ]->Flags & GFLG_DISABLED ))
  234.                 ActivateGadget( Gadgets[ GD_Tit ], Wnd, NULL );
  235.             break;
  236.  
  237.         case    'b':
  238.             if(!( Gadgets[ GD_Label ]->Flags & GFLG_DISABLED ))
  239.                 ActivateGadget( Gadgets[ GD_Label ], Wnd, NULL );
  240.             break;
  241.  
  242.         case    'p':
  243.             running = PosTitKeyPressed( Wnd, Gadgets, IE, Msg );
  244.             break;
  245.  
  246.         case    'u':
  247.             running = UndKeyPressed( Wnd, Gadgets, IE, Msg );
  248.             break;
  249.  
  250.         case    'i':
  251.             running = HighKeyPressed( Wnd, Gadgets, IE, Msg );
  252.             break;
  253.  
  254.         case    'o':
  255.             running = OkKeyPressed( Wnd, Gadgets, IE, Msg );
  256.             break;
  257.  
  258.         case    'c':
  259.             running = AnnullaKeyPressed( Wnd, Gadgets, IE, Msg );
  260.             break;
  261.  
  262.         case    't':
  263.             if(!( Gadgets[ GD_Top ]->Flags & GFLG_DISABLED ))
  264.                 ActivateGadget( Gadgets[ GD_Top ], Wnd, NULL );
  265.             break;
  266.  
  267.         case    'v':
  268.             if(!( Gadgets[ GD_Vis ]->Flags & GFLG_DISABLED ))
  269.                 ActivateGadget( Gadgets[ GD_Vis ], Wnd, NULL );
  270.             break;
  271.  
  272.         case    'w':
  273.             if(!( Gadgets[ GD_ScW ]->Flags & GFLG_DISABLED ))
  274.                 ActivateGadget( Gadgets[ GD_ScW ], Wnd, NULL );
  275.             break;
  276.  
  277.         case    'a':
  278.             if(!( Gadgets[ GD_Spc ]->Flags & GFLG_DISABLED ))
  279.                 ActivateGadget( Gadgets[ GD_Spc ], Wnd, NULL );
  280.             break;
  281.  
  282.         case    'd':
  283.             running = DisabKeyPressed( Wnd, Gadgets, IE, Msg );
  284.             break;
  285.  
  286.         case    'r':
  287.             running = ROnKeyPressed( Wnd, Gadgets, IE, Msg );
  288.             break;
  289.  
  290.         case    'h':
  291.             running = ShowKeyPressed( Wnd, Gadgets, IE, Msg );
  292.             break;
  293.  
  294.         case    'm':
  295.             if(!( Gadgets[ GD_IH ]->Flags & GFLG_DISABLED ))
  296.                 ActivateGadget( Gadgets[ GD_IH ], Wnd, NULL );
  297.             break;
  298.  
  299.         case    'x':
  300.             if(!( Gadgets[ GD_MaxP ]->Flags & GFLG_DISABLED ))
  301.                 ActivateGadget( Gadgets[ GD_MaxP ], Wnd, NULL );
  302.             break;
  303.  
  304.         default:
  305.             running = TagsVanillaKey( Code, Wnd, Gadgets, IE );
  306.             break;
  307.  
  308.     }
  309.     return( running );
  310. }
  311.